﻿using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using UC.BaseMVVM;

namespace UC.Test.BaseMVVM.BaseModelValidacao
{
    public class BaseTestValidacao
    {
        public class ModelBaseFacade : ModelBase
        {
            public ModelBaseFacade(Type tipoObjetoModel, ValidadorConfig configuracoesDeValidacao = null)
                : base(tipoObjetoModel, configuracoesDeValidacao)
            {
            }

            public ValidadorConfig ObterConfiguracoesDeValidacao()
            {
                return ConfiguracoesDeValidacao;
            }
        }

        public class UmModelTesteDeNegocio : ModelBase
        {
            private string _umaPropriedadeDeCampoDeViewSemValidacao;
            private string _umaPropriedadeDeCampoDaViewComValidadorObrigatorio;
            //private IAsyncResult _asyncResult;

            public UmModelTesteDeNegocio(Type tipoObjetoModel, ValidadorConfig configuracoesDeValidacao = null)
                : base(tipoObjetoModel, configuracoesDeValidacao)
            {
            }

            //public UmModelTesteDeNegocio(Type tipoObjetoModel, ValidadorConfig configuracoesDeValidacao, IAsyncResult asyncResult)
            //    : base(tipoObjetoModel, configuracoesDeValidacao)
            //{
            //    _asyncResult = asyncResult;
            //}

            protected override void DispararValidacao(object sender, PropertyChangedEventArgs e)
            {
                ExecucaoDoDisparoDaValidacao.Invoke(sender, e);
                //OnExecucao(_asyncResult);
            }

            public string UmaPropriedadeDeCampoDeViewSemValidacao
            {
                get { return _umaPropriedadeDeCampoDeViewSemValidacao; }
                set
                {
                    _umaPropriedadeDeCampoDeViewSemValidacao = value;
                    RaisePropertyChanged("UmaPropriedadeDeCampoDeViewSemValidacao");
                }
            }

            [Required]
            public string UmaPropriedadeDeCampoDaViewComValidadorObrigatorio
            {
                get { return _umaPropriedadeDeCampoDaViewComValidadorObrigatorio; }
                set
                {
                    _umaPropriedadeDeCampoDaViewComValidadorObrigatorio = value;
                    RaisePropertyChanged("UmaPropriedadeDeCampoDaViewComValidadorObrigatorio");
                }
            }
        }

    }
}